логотип PurpleSchool
  • Бесплатно
      Карта развитияОсновы разработкиCSS Flexbox
    • Новостные рассылкиИконка стрелки
    • База знанийИконка стрелки
    • Карьерные пути
      • Frontend React разработчик
      • Frontend Vue разработчик
      • Backend разработчик Node.js
      • Fullstack разработчик React / Node.js
      • Mobile разработчик React Native
      • Backend разработчик Golang
      • Devops инженер
    • О нас
      • Отзывы
      • Реферальная программа
      • О компании
      • Контакты
    • Иконка открытия меню
      • Сообщество
      • PurpleПлюс
      • AI тренажёр
      • Проекты
    логотип PurpleSchool
    ютуб иконка
    Telegram иконка
    VK иконка
    Курсы
    ГлавнаяКаталог курсовFrontendBackendFullstack
    Практика
    КарьераПроектыPurpleПлюс
    Материалы
    БлогБаза знаний
    Документы
    Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
    Реквизиты
    ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

    PurpleSchool © 2020 -2025 Все права защищены

  • Курсы
    Иконка слояПерейти в каталог курсов
    • FrontendИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    • Картинка группы Общее

      Общее


      • Основы разработки
      • Основы Git
      • HTML и CSS
      • CSS Flexbox
      • Основы JavaScript
      • Продвинутый JavaScript
      • TypeScript с нуля
      • Neovim
    • Картинка группы React

      React


      • React и Redux Toolkit
      • Zustand
      • Next.js - с нуля
      • Feature-Sliced Design
    • Картинка группы Vue.js

      Vue.js


      • Vue 3 и Pinia
      • Nuxt
      • Feature-Sliced Design
    • Картинка группы Angular

      Angular


      • Angular 19 Иконка курсаСкоро!
    • Картинка группы Node.js

      Node.js


      • Основы Git
      • Основы JavaScript
      • Продвинутый JavaScript
      • Telegraf.js Иконка курсаСкоро!
      • TypeScript с нуля
      • Node.js с нуля
      • Nest.js с нуля
    • Картинка группы Golang

      Golang


      • Основы Git
      • Основы Golang
      • Продвинутый Golang
      • Golang - Templ Fiber HTMX
    • Картинка группы C#

      C#


      • Основы C#
    • Картинка группы Python

      Python


      • Основы Python
      • Продвинутый Python Иконка курсаСкоро!
    • Картинка группы PHP

      PHP


      • Основы PHP Иконка курсаСкоро!
    • Картинка группы Общее

      Общее


      • Основы разработки
      • Docker и Ansible
      • Kubernetes и Helm
      • Микросервисы
      • Neovim
    • Картинка группы Общее

      Общее


      • Основы разработки
      • Основы Git
      • Основы Linux
      • Bash скрипты
      • Docker и Ansible
      • Kubernetes и Helm
      • Микросервисы
      • Neovim
    • Картинка группы Общее

      Общее


      • Основы разработки
      • Основы Git
      • Neovim
    • Картинка группы React Native

      React Native


      • HTML и CSS
      • Основы JavaScript
      • Продвинутый JavaScript
      • TypeScript с нуля
      • React и Redux Toolkit
      • React Native и Expo Router
    • Картинка группы Flutter

      Flutter


      • Основы Flutter Иконка курсаСкоро!
    • Картинка группы Swift

      Swift


      • Основы Swift и iOS
    • Картинка группы Общее

      Общее


      • Продвинутое тестирование Иконка курсаСкоро!
      • Основы тестирования ПО
    • Картинка группы Общее

      Общее


      • Собеседование
      • Современный Agile
    • Картинка группы Figma

      Figma


      • Основы дизайна
  • логотип PurpleSchool
    • Сообщество
    • PurpleПлюс
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    Date: работа с датами в JavaScript

    Date: работа с датами в JavaScript

    Аватар автора Date: работа с датами в JavaScript

    Валерий Шестернин

    Иконка календаря29 августа 2023

    Работа с датами в JavaScript - важная часть разработки веб-приложений. В данной статье мы рассмотрим основные функции языка, такие как создание объектов даты, получение текущей даты и времени, форматирование значений и манипуляции с датами. Вы получите полное представление о работе с датами в JavaScript и сможете применить эти знания в своих проектах.

    Базовые операции с датами

    Создать дату в JavaScript можно с помощью конструктора Date(), который при вызове без параметров (const date = new Date()) вернет дату и время вызова в формате YYYY-MM-DDTHH:mm:ss.sssZ где YYYY-MM-DD - год, месяц и день, T - разделитель между датой и временем, HH:mm:ss.sss - часы, минут, секунды и миллисекунды, а Z - настройки временной зоны. Даты в JavaScript представлены в виде количества миллисекунд, прошедших с 1 января 1970 года по UTC поэтому новую дату можно так же создать с помощью метода .now() глобального объекта Date, который вернет количество миллисекунд до вызова.

    const date1 = new Date();
    //2023-08-29T11:30:31.224Z
    
    const date2 = Date.now();
    //1693308631228
    

    Поскольку даты содержат точное количество миллисекунд, прошедших с 1 января 1970 года по UTC разницу между ними можно использовать для замера времени между началом и окончанием выполнения какой-либо операции. Для таких целей лучше использовать метод Date.now() вместо конструктора т.к. он гораздо быстрее потому что не создает при вызове промежуточных объектов и возвращает сразу количество миллисекунд, что может быть важно при проведении большого количества замеров подряд.

    const start = Date.now();
    (function someCalcs() {
      //какие-то сложные вычисления
    })();
    console.log(`Время выполнения: ${Date.now() - start}мс`);
    

    Что бы задать конкретную дату нужно передать ее в конструктор в одном из следующих форматов:

    • Указать год, месяц, день и т.д. цифрами через запятую
    • Строка вида “ YYYY-MM-DDTHH:mm:ss.sssZ” или 'December 31, 2023 23:59:59’ фактически такой способ является неявным вызовом метода Date.parse()
    • Другой объект даты
    • Количество миллисекунд, прошедших с 1 января 1970 года по UTC

    При указании даты строкой или перечислением цифр не обязательно указывать точное до мс значение. Если не передать количество мс, секунд, минут или часов - они будут автоматически установлены на 0, дни на 1, месяца на 0 (нумерация месяцев начинается с 0). При этом год нужно передавать полностью, а не последние 2 цифры.

    Внести изменения в уже существующий объект даты, можно с помощью методов, которые имеют название .set<нужное значение> как .setDate() для дней (.getDay() вернет день недели числом от 0 до 6), .setFullYear() для года (.setYear() был удален из стандарта т.к. мог принимать не полное значение года) или .setHours() для часов. Если указать при объявлении даты или передать в один из таких методов несуществующее значение, например 20-й месяц или 25-й час - дата автоматически отформатируется и вместо 25 часов добавит к значений дней единицу, а часы установит на 1.

    Важно помнить что Date ссылочный тип данных и два объекта, содержащие одинаковые даты не будут равны друг другу при любом типе сравнения.

    const newYear1 = new Date(2023, 11, 31, 23, 59, 59, 999);
    //2023-12-31T18:59:59.999Z
    const newYear2 = new Date("2023-12-31T18:59:59.999");
    //2023-12-31T13:59:59.999Z
    const newYear3 = new Date(1704031199999); //передаем количество мс
    //2023-12-31T13:59:59.999Z
    console.log(newYear1 === newYear2); //false
    const ms = newYear1 - newYear2; //при этом разница в ms = 0
    //0
    
    newYear1.setDate(32); //устанавливаем несуществующий день в месяце
    console.log(newYear1);
    //2024-01-01T18:59:59.999Z дата подстроится под заданные параметры
    

    По аналогии с методами для изменения значений даты, существуют методы для получения части значений. Такие методы имеют название .get<нужное значение> или .getUTC<нужное значение> для получения получения значений по Гринвичу.

    const date = new Date();
    //дата и время на момент вызова
    date.getHours();
    //значение часов в месте вызова 
    date.getUTCHours()
    //значение часов по Гринвичу
    

    Работа с форматированием дат

    В JavaScript доступны методы для вывода дат в виде строки разных форматов:

    • .toString() - не принимает параметров и возвращает строку в виде: день недели (Mon), первые три буквы месяца (Aug), день (28), год (2023), время без мс (12:45:30), часовой пояс относительно UTC (GMT-0700) и название часового пояса в скобках (Pacific Daylight Time).
    • .toDateString - аналогичен .toString() , но возвращает только дату без времени.
    • .toTimeString() - аналогичен .toString(), но возвращает только время без даты.
    • .toUTCString() - аналогичен .toString(), но возвращает дату по Гринвичу.
    • .toLocalString() - принимает настройки локализации (язык и название страны) и опции (например формат отображения часов в виде 24 или am/pm) и возвращает строку в принятом в указанной стране и языке формате.
    • .toLocalDateString() - аналогичен .toLocalString(), но возвращает только дату без времени.
    • .toLocalTimeString() - аналогичен .toLocalString(), но возвращает только время без даты.
    const date = new Date(); //стандартное форматирование
    //2023-08-29T14:47:07.820Z
    console.log(date.toString()); //в строку
    //Tue Aug 29 2023 19:47:07 GMT+0500 (Yekaterinburg Standard Time)
    console.log(date.toDateString()); //только дата
    //Tue Aug 29 2023
    console.log(date.toTimeString()); //только время
    //19:47:07 GMT+0500 (Yekaterinburg Standard Time)
    console.log(date.toUTCString()); //по Гринвичу
    //Tue, 29 Aug 2023 14:47:07 GMT
    console.log(date.toLocaleString("en-US")); //англичйский США
    //8/29/2023, 7:47:07 PM
    console.log(date.toLocaleString("en-US", { hour12: false })); //то же но 24 часовой формат
    //8/29/2023, 19:47:07
    console.log(date.toLocaleDateString("de-DE")); //только дата немецкий Германия
    //29.8.2023
    console.log(date.toLocaleTimeString("ko-KR")); //только время корейский Корея
    //오후 7:47:07
    

    Date можно сериализовать в формат JSON с помощью метода .toJSON() . Конструктор конечно же прекрасно распарсит такую строку.

    const toJSON = new Date().toJSON();
    //2023-08-29T14:51:52.158Z
    const toDate = new Date(toJSON);
    //2023-08-29T14:51:52.158Z
    console.log(typeof toJSON); //string
    console.log(typeof toDate);//object
    

    Заключение

    Понимание концепций работы с датами и навык их применения позволят вам создавать более динамичные и функциональные веб-приложения на JavaScript. Не забывайте продолжать изучать и практиковать использование дат в своих проектах, чтобы стать опытным и уверенным разработчиком. Надеюсь что данная статья была полезна для понимания столь важной темы, а если вы хотите изучить основы языка или детально погрузиться в устройство JavaScript я подготовил подробные курсы.

    Иконка глаза26 261

    Комментарии

    0

    Постройте личный план изучения Основы разработки до уровня Middle — бесплатно!

    Основы разработки — часть карты развития Frontend, Backend, Mobile

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    Основы Git

    Антон Ларичев
    AI-тренажеры
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    HTML и CSS

    Антон Ларичев
    AI-тренажеры
    Практика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    CSS Flexbox

    Антон Ларичев
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    бесплатно
    Подробнее
    Иконка чипа0